<?php
// +----------------------------------------------------------------------
// | 海豚PHP框架 [ DolphinPHP ]
// +----------------------------------------------------------------------
// | 版权所有 2016~2019 广东卓锐软件有限公司 [ http://www.zrthink.com ]
// +----------------------------------------------------------------------
// | 官方网站: http://dolphinphp.com
// +----------------------------------------------------------------------

namespace app\mill\admin;

use app\admin\controller\Admin;
use app\common\builder\ZBuilder;
use app\mill\model\Car as CarModel;
use think\Db;

/**
 * 车辆控制器
 * @package app\admin\controller
 */
class Car extends Admin
{
    /**
     * 车辆列表
     * @return mixed
     */
    public function index(){
        cookie('__forward__', $_SERVER['REQUEST_URI']);

        // 获取查询条件
        $map = $this->getMap();
        // 数据列表
        $data_list = Db::name('mill_car')->where($map)->order('id desc')->paginate();

        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('车辆列表') // 页面标题
            ->setTableName('mill_car') // 设置表名
            ->hideCheckbox()
            ->setSearchArea([
                //['text:2', 'nickname', '司机联系人', 'like'],
                //['text:2', 'mobile', '司机联系电话', 'like'],
                ['text:2', 'plate_number', '车牌号码', 'like'],
                ['select:2', 'status', '状态', '', '', ['1' => '启用', '0' => '禁用']],
            ])
            ->addColumns([ // 批量添加列
                ['id', '序号'],
                //['nickname', '司机联系人'],
                //['mobile', '司机联系电话'],
                ['plate_number', '车牌号码'],
                //['note', '备注'],
                ['status', '状态', 'switch'],
                ['right_button', '操作', 'btn']
            ])
            ->addTopButton('add') // 添加顶部按钮
            ->addTopButton('enable') // 添加顶部按钮
            ->addTopButton('disable') // 添加顶部按钮
            ->addRightButtons('edit') // 批量添加右侧按钮
            ->setRowList($data_list) // 设置表格数据
            ->setColumnWidth([
                'id'  => 60,
                'note'  => 180,
                'status'  => 60,
            ])
            ->fetch(); // 渲染模板
    }

    /**
     * 新增
     * @return mixed
     */
    public function add()
    {
        if ($this->request->isPost()) {
            $data = input();
            // 验证
            $result = $this->validate($data, 'Car');
            // 验证失败 输出错误信息
            if(true !== $result) $this->error($result);

            //函数:SBC_DBC  中文标点转英文标点
            //函数:replaceSpecialChar  去除所有标点字符包括空格
            //函数:strtoupper  转大写
            $data['plate_number'] = filterStr($data['plate_number']);
            $update = [
                'plate_number'  =>  $data['plate_number'],
            ];
            $count = Db::name('mill_car')->where($update)->count();
            if($count > 0)errors('该车牌号已存在');

            if (CarModel::create($data)) {
                $this->success('操作成功', url('index'));
            }
            $this->error('操作失败');
        }


        return ZBuilder::make('form')
            ->setPageTitle('新增车辆') // 页面标题
            ->addFormItems([ // 批量添加表单项
                //['text:||||must', 'nickname', '司机联系人'],
                //['text:||||must', 'mobile', '司机联系电话'],
                ['text:||||must', 'plate_number', '车牌号码'],
                //['textarea', 'note', '备注'],
            ])
            ->layout(['note'=>12])
            ->fetch();
    }

    /**
     * 编辑
     * @param null $id 客户id
     * @return mixed
     */
    public function edit($id=null)
    {

        $id = input('param.id');
        // 获取数据
        $info = CarModel::find($id);

        if ($this->request->isPost()) {
            $data = $this->request->post();
            // 验证
            $result = $this->validate($data, 'Car');
            // 验证失败 输出错误信息
            if(true !== $result) $this->error($result);

            //函数:SBC_DBC  中文标点转英文标点
            //函数:replaceSpecialChar  去除所有标点字符包括空格
            //函数:strtoupper  转大写
            $data['plate_number'] = filterStr($data['plate_number']);
            $update = [
                'plate_number'  =>  $data['plate_number'],
            ];
            $count = Db::name('mill_car')->where($update)->count();
            if($count > 0)errors('该车牌号已存在');

            // 更新数据
            if (CarModel::update($data)) {
                $this->success('编辑成功', cookie('__forward__'));
            } else {
                $this->error('编辑失败');
            }
        }

        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('编辑车辆') // 页面标题
            ->addFormItem('hidden', 'id')
            ->addFormItem('hidden', 'status')
            ->addFormItems([ // 批量添加表单项
                //['text:||||must', 'nickname', '司机联系人'],
                //['text:||||must', 'mobile', '司机联系电话'],
                ['text:||||must', 'plate_number', '车牌号码'],
                //['textarea', 'note', '备注'],
            ])
            ->setFormData($info)
            ->layout(['note'=>12])
            ->fetch();
    }

    /**
     * 删除
     * @param array $record 行为日志
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function delete($record = [])
    {
        return $this->setStatus('delete');
    }

    /**
     * 启用
     * @param array $record 行为日志
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function enable($record = [])
    {
        return $this->setStatus('enable');
    }

    /**
     * 禁用
     * @param array $record 行为日志
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function disable($record = [])
    {
        return $this->setStatus('disable');
    }

    /**
     * 设置状态：删除、禁用、启用
     * @param string $type 类型：delete/enable/disable
     * @param array $record
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function setStatus($type = '', $record = [])
    {
        $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
        $ids = (array)$ids;

        foreach ($ids as $id) {

            switch ($type) {
                case 'enable':
                    if (false === CarModel::where('id', $id)->setField('status', 1)) {
                        $this->error('启用失败，车辆ID：'.$id);
                    }
                    break;
                case 'disable':
                    if (false === CarModel::where('id', $id)->setField('status', 0)) {
                        $this->error('禁用失败，车辆ID：'.$id);
                    }
                    break;
                case 'delete':

                    if (false === CarModel::where('id', 'in', $id)->delete()) {
                        $this->error('删除失败，车辆ID：'.$id);
                    }
                    break;
                default:
                    $this->error('非法操作');
            }

            action_log('role_'.$type, 'mill', $id, UID);
        }

        $this->success('操作成功');
    }
}
